package com.zookeeper;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

/**
 * 
 * 连接Zookeeper
 * @author Administrator
 *
 */
public class ExcuteMain001 {

	private static String ZK_SERVER_CONNECT = "192.168.80.153:2181,192.168.80.154:2181,192.168.80.155:2181";

	private static int ZK_SERVER_CONN_TIMEOUT = 1000;
	
	public static void main(String[] args) throws Exception {
		// 创建一个与服务器的连接, 该Watcher在连接后自动执行
		ZooKeeper zk = new ZooKeeper(ZK_SERVER_CONNECT, ZK_SERVER_CONN_TIMEOUT, new Watcher() {
			// 监控所有被触发的事件
			public void process(WatchedEvent event) {
				System.out.println("ExcuteMain001已经触发了" + event.getType() + "事件！");
			}
		});
		// 创建一个目录节点
		zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		// 创建一个子目录节点，设置初始值
		zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(), Ids.OPEN_ACL_UNSAFE,
				CreateMode.PERSISTENT);
		System.out.println("/testRootPath/testChildPathOne的值:" + new String(zk.getData("/testRootPath", false, null)));
		// 取出子目录节点列表
		System.out.println(zk.getChildren("/testRootPath", true));
		// 修改子目录节点数据
		zk.setData("/testRootPath/testChildPathOne", "modifyChildDataOne".getBytes(), -1);
		System.out.println("目录节点状态：[" + zk.exists("/testRootPath", true) + "]");
		// 创建另外一个子目录节点
		zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), Ids.OPEN_ACL_UNSAFE,
				CreateMode.PERSISTENT);
		System.out.println("/testRootPath/testChildPathTwo的值:"
				+ new String(zk.getData("/testRootPath/testChildPathTwo", true, null)));
		// 删除子目录节点, -1位版本,表示删除所有版本. 如果指定整数版本则会删除对应版本的内容
		zk.delete("/testRootPath/testChildPathTwo", -1);
		zk.delete("/testRootPath/testChildPathOne", -1);
		// 删除父目录节点
		zk.delete("/testRootPath", -1);
		// 关闭连接
		zk.close();
	}

}
